X may be any array. Y must be a valid index specification. R is an array composed of elements indexed from X and the shape of X is determined by the index specification.
This form of Indexing, using brackets, does not follow the normal syntax of a dyadic function. For an alternative method of indexing, see Index.
⎕IO is an implicit argument of Indexing.
Three forms of indexing are permitted. The form used is determined by context.
Simple Indexing
For vector X, Y is a simple integer array composed of items from the set ⍳⍴X.
R consists of elements selected according to index positions in Y. R has the same shape as Y.
Examples
A←10 20 30 40 50 A[2 3⍴1 1 1 2 2 2] 10 10 10 20 20 20 A[3] 30 'ONE' 'TWO' 'THREE'[2] TWO
For matrix X, Y is composed of two simple integer arrays separated by the semicolon character (;). The arrays select indices from the rows and columns of X respectively.
Examples
+M←2 4⍴10×⍳8 10 20 30 40 50 60 70 80 M[2;3] 70
For higher-rank array X, Y is composed of a simple integer array for each axis of X with adjacent arrays separated by a single semicolon character (;). The arrays select indices from the respective axes of X, taken in row-major order.
Examples
⊢A←2 3 4⍴10×⍳24 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 A[1;1;1] 10 A[2;3 2;4 1] 240 210 200 170
If an indexing array is omitted for the Kth axis, the index vector ⍳(⍴X)[K] is assumed for that axis.
Examples
A[;2;] 50 60 70 80 170 180 190 200 M 10 20 30 40 50 60 70 80 M[;] 10 20 30 40 50 60 70 80 M[1;] 10 20 30 40 M[;1] 10 50
Choose Indexing
The index specification Y is a non-simple array. Each item identifies a single element of X by a set of indices with one element per axis of X in row-major order.
Examples
M 10 20 30 40 50 60 70 80 M[⊂1 2] 20 M[2 2⍴⊂2 4] 80 80 80 80 M[(2 1)(1 2)] 50 20
A scalar may be indexed by the enclosed empty vector:
S←'Z' S[3⍴⊂⍳0] ZZZ
Simple and Choose indexing are indistinguishable for vector X:
V←10 20 30 40 V[⊂2] 20 ⊂2 2 V[2] 20
Reach Indexing
The index specification Y is a non-simple integer array, each of whose items reach down to a nested element of X. The items of an item of Y are simple vectors (or scalars) forming sets of indices that index arrays at successive levels of X starting at the top-most level. A set of indices has one element per axis at the respective level of nesting of X in row-major order.
Examples
G←('ABC' 1)('DEF' 2)('GHI' 3)('JKL' 4) G←2 3⍴G,('MNO' 5)('PQR' 6) G ABC 1 DEF 2 GHI 3 JKL 4 MNO 5 PQR 6 G[((1 2)1)((2 3)2)] DEF 6 G[2 2⍴⊂(2 2)2] 5 5 5 5 G[⊂⊂1 1] ABC 1 G[⊂1 1] ABC 1 V←,G V[⊂⊂1] ABC 1 V[⊂1] ABC 1 V[1] ABC 1
Indexing Classes
If Y is a ref to an instance of a Class with a Default property, indexing is applied to the Default property. Similarly, indexing applied to a .NET collection returns the appropriate item(s) of the collection.
Example
↑⎕SRC c :Class c :Property Default p :Access Public Shared ∇ r←get r←2 3 4⍴⎕A ∇ :EndProperty :EndClass c[2;3;] UVWX
See also: Indexing Classes.